import torch  # 导入PyTorch库

# 定义参数
batch_size = 1  # 批次大小：每次处理1个样本
seq_len = 3  # 序列长度：每个样本包含3个时间步
input_size = 4  # 输入特征维度：每个时间步的输入是4维向量
hidden_size = 2  # 隐藏层维度：RNNCell的输出（隐藏状态）是2维向量

# 创建RNNCell实例
# input_size：输入特征维度
# hidden_size：隐藏层维度（输出维度）
Cell = torch.nn.RNNCell(input_size=input_size, hidden_size=hidden_size)

# 生成随机输入数据
# 形状为(seq_len, batch_size, input_size) → (3, 1, 4)
# 表示：3个时间步，每个时间步1个样本，每个样本4个特征
dataset = torch.randn(seq_len, batch_size, input_size)
print(dataset)  # 打印输入数据

# 初始化隐藏状态
# 形状为(batch_size, hidden_size) → (1, 2)
# 初始隐藏状态h0设为全零向量
hidden = torch.zeros(batch_size, hidden_size)

# 逐个时间步处理序列
for idx, input in enumerate(dataset):
    print('=' * 10, idx, '=' * 10)  # 分隔每个时间步
    print('Input size:', input.shape)  # 打印当前时间步输入的形状 → (1, 4)

    # RNNCell前向计算：用当前输入和上一时间步的隐藏状态计算新的隐藏状态
    hidden = Cell(input, hidden)

    print('Outputs size:', hidden.shape)  # 打印输出（隐藏状态）的形状 → (1, 2)
    print(hidden)  # 打印当前时间步的隐藏状态值